fn main() {
    let s1 = String::from("abc");
    let s2 = "ab";

    let s3 = longest(s1.as_str(), s2);
    println!("{}", s3);

    // s2的生命周期比b长
    let b = Book {
        name: s2,
    };
    println!("book: {:?}", b)

}

// 函数上的生命周期
// 描述 引用参数 和 返回值 的生命周期之间的关系
fn longest<'a>(x: &'a str, y: &str) -> &'a str {
    x
}

// 结构体字段是个引用，要注明生命周期
#[derive(Debug)]
struct Book<'a> {
    name: &'a str
}

// 方法上也要声明生命周期
impl<'a> Book<'a> {
    // 符合省略规则
    fn get_name(&self) -> &str {
        self.name
    }
}